题意$:N$ 个球排成一排,第个$i$球的颜色为$c_i$,重量为 $w_i$。我们定义「一次操作」为:选择两个颜色相同,且重量之和不超过$X$的球,交换它们的位置;或选择两个颜色不同,且重量之和不超过$Y$的球,交换它们的位置。问进行任意次操作后,可以得到多少种不同的颜色序列。输出答案对 $10^9+7$ 取模的结果。
显然如果有三个球$a,b,c$,如果$a$与$b$能交换,$b$与$c$能交换,那$a$与$c$一定能通过$b$的“媒介”交换($a$先于$b$交换,$b$与$c$交换,$a$与$b$交换)。
于是我们可以把$a,b,c$缩在同一个连通块里。
由于不同颜色与相同颜色交换条件是不一样的,我们先考虑相同颜色。
显然只需要用最小值做“媒介”即可。
然后我们考虑跨颜色交换。我们发现只需要用全局最小值做“媒介”,也就是说对于某个点,先通过该颜色最小值换到全局最小值,再通过全局最小值换到其他点。如果与全局最小值颜色相同,那我们就只能用次小值做媒介。
这样我们只需要记录某种颜色的最小值、全局最小值、全局次小值即可。
然后我们不难发现含有不同颜色的连通块只有一个,那就是全局最小值所在的连通块。
而只有一种颜色的连通块对答案没有影响。
于是我们只考虑最小值所在的连通块。首先我们找到全局最小值、全局次小值与每种颜色的最小值。如果他们都不能交换,那显然是凉了(答案为11)。我们对每种颜色数出能与该种颜色最小值交换的点数,然后用每种连通块的最小值与全局最小值(全局次小值)比较,求出这个联通块。我们发现就是求这个联通块排列方案数,其实就是可重集合排列。
1 |
|